问题标签 [memory-access]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 为 BOOL 属性伪造原子性 -> & 为什么在 NSOperation::isFinished,isExecuting 的示例代码中没有同步?
我可以摆脱这个吗,或者编译器会代表我以同样的方式优化 BOOL 原子?
PS 对于这两个不经常访问的特定属性,我猜这种过早的优化是没用的,但我想知道这在幕后是如何工作的,所以这个问题可能仍然有用(对我来说,如果不是其他任何人的话;-)
c++ - 从非合并访问到合并内存访问 CUDA
我想知道是否有任何简单的方法可以将非合并的内存访问转换为合并的内存访问。让我们以这个数组为例:
现在,我知道如果块 0 中的线程 0 访问dW[0]
,然后块 0 中的线程 1 访问dw[1]
,那是全局内存中的合并访问。问题是我有两个操作。第一个是如上所述合并的。但第二个不是因为块 0 中的线程 1 需要对dW[0]
,dW[1]
和进行操作dW[2]
。
我知道容器的初始形状允许或禁止合并访问。但是dW
是一个非常大的数组,在这个过程中我无法对其进行转换。
你知道是否有可能缓解这个问题?
c++ - 未对齐的内存访问:是否已定义行为?
考虑以下代码:
这被认为是有效的代码,还是内存泄漏/未定义的行为?我在问,因为通过:
我们正在访问程序不应访问的字节(我猜)。
c++ - CUDA:Cuda 内存访问不同于 OpenCL?是什么导致了这种非法的内存访问?
所以我写了一个我自己写的 OpenCL 程序的 Cuda 版本。OpenCL 版本有效,而 Cuda 版本无效。现在将 OpenCL 代码转换为 Cuda 代码不是一对一的,但我很困惑为什么 cuda 版本在我翻译它时基于一个 cuda 示例之后无法工作。
我an illegal memory access was encountered (error code # = 77)
在 cudaMemcpy(... cudaMemcpyDeviceToHost); (第 227 行)虽然是在 memcpy 期间,但问题似乎是内核运行期间的非法内存访问。这是我通过 cuda-memcheck 检查程序得到的示例:
我不太了解 Cuda 和 OpenCL 之间的区别,无法知道我做错了什么。我试着到处乱搞MoveoutAndStackCuda<<<grid, threads>>>
,把它改成类似MoveoutAndStackCuda<<<grid, threads, (localGroupSize * sizeof(float))>>>
但没有运气的东西。我还尝试注释掉我的内核的一部分,即使我注释掉了我的大部分内核,问题似乎也会发生。
希望这对您来说是可验证的,但有可能不是,因为它可能取决于我的硬件。我在 CentOS 6.8 (Final) 上运行Quadro M5000 。
我试图尽可能多地删除对这个问题无用的东西。我还将提供此 MCV 示例的可用 OpenCL 版本,但是我没有文字了。我现在建议使用参数 100 50 40 进行调试,因为我还有一个问题是产生了太多全局线程,我将在解决这个问题后解决这些问题。
这是最小、完整和可验证的示例:
page-tables - Effective Access Time
I am given the following question:
Now assume the system has no page faults, we are considering adding a TLB that will take 1 nano-second to lookup an address translation. What hit rate (to the nearest 5%) in the TLB is required to reduce the effective access time to memory by a factor of 2.5?
I am told an average memory access takes 100ns. Since there are 4 memory accesses for a 3 level PT (3 for the page table 1 for physical memory) I deduced that it takes 400ns.
I am then asked to reduce that by a factor of 2.5. So (2/5) *400 = 160ns.
my goal EAT is 160ns. I started setting up the problem and I can't figure out where to go from here.
I am given the following solution but I am just unable to follow it:
Access time = 100 X + (1-x) 400 – 100 ns for hit (read memory), 400ns for miss 160 = 100 x + 400 – 400x -> x = .8 -> 80% TLB hit rate
Can someone explain to me how they got to this step? I thought EAT was p(time it takes for a hit) + 1-p(time it takes for a miss) where p is the hit rate. isn't the time it takes for a hit 300ns? and then time it takes for a miss is 400ns?
from my logic I tried: p(300) + ((1-p) (400)) but when I went to compute it, I did not get the correct setup as the solution. Can someone explain where my logic is going wrong? Am I wrong about how many memory accesses a hit takes?
c - C中的内存访问冲突
我已经用 C 语言创建了一个带有动态字段的元素周期表程序,或者至少我尝试过。
稍后我将使用其他 116 个元素扩展程序,但现在,它将是这样的。
编译器什么也没说,但我得到一个运行时错误:'内存访问冲突'
我忽略/错过了什么?
输出应该只显示保存的元素(铝/镭)。
输出应该是这样的:
仍应创建定义的字段,但不应在控制台中显示空字段/地址
c - 为什么这段代码会多次生成缓存命中?
我了解缓存命中和未命中的概念,但不知何故我并没有真正理解代码示例。下面的代码应该会生成很多 catch Hits,但是为什么呢?我们在哪一部分看到了这一点?我们现在怎么知道这段代码大部分时间会在缓存中找到数据呢?
c++ - 提供对 SoA 的 AoS 访问
我有以数组结构 (SoA) 或指针结构 (SoP) 形式在内存中布局的数据,并且有一种方法可以访问该数据,就好像它是以结构数组 (AoS) 形式布局一样——给出的代码以下。
但是,我不太喜欢使用struct AoS_4_SoP
-- 尽管这struct
似乎使用了模板,但它并不是真正的通用,例如,foo
并且bar
在其中进行了硬编码。
两个问题/要求:
1) 对于读写性能,提供的 AoS 访问是否与直接 SoA 访问一样好?
2) 更通用的方案是什么?(我在这里看到了 quamrana的代码,但没有帮助。)
这是main()
显示上述用法的示例:
上面的代码可以通过以下方式编译:
并产生以下输出:
mpi - 流内存带宽基准测试与本地运行 MPI 的潜在加速之间的实际关系是什么?
我运行了流内存带宽基准测试(https://www.cs.virginia.edu/stream/) 在具有 10 个处理器的计算机上。基准测试表明,在 3 或 4 个处理器之后,加速比稳定在 3 倍左右。这个结果对 MPI 代码的性能有什么实际意义?为简单起见,假设程序仅在这台多核机器上本地运行多个进程。这是否意味着如果您正在运行一个内存访问密集型程序,那么即使您使用所有内核,您也无法获得超过 3 倍的加速?如果你运行的程序不是内存访问密集型的,理论上你能获得完整的 10 倍吗?如果您同时运行两个或三个内存访问密集型程序,每个程序都使用三个处理器,它们每个都能够获得 3 倍的加速,还是它们会在同时从 RAM 中提取时相互干扰并减慢速度?