我想在没有 CPU-RAM 的情况下直接将数据从 GPU0-DDR 复制到 GPU1-DDR。
如第 15 页所述:http : //people.maths.ox.ac.uk/gilesm/cuda/MultiGPU_Programming.pdf
Peer-to-Peer Memcpy
? Direct copy from pointer on GPU A to pointer on GPU B
? With UVA, just use cudaMemcpy(…, cudaMemcpyDefault)
? Or cudaMemcpyAsync(…, cudaMemcpyDefault)
? Also non-UVA explicit P2P copies:
? cudaError_t cudaMemcpyPeer( void * dst, int dstDevice, const void* src,
int srcDevice, size_t count )
? cudaError_t cudaMemcpyPeerAsync( void * dst, int dstDevice,
const void* src, int srcDevice, size_t count, cuda_stream_t stream = 0 ) …Run Code Online (Sandbox Code Playgroud) 当我使用x86_64 CAS指令时LOCK CMPXCHG,即原子(读取值,比较并写回结果),此时锁定的内容:
这是真的吗,x86_64 Intel CPU使用?
concurrency multithreading x86-64 compare-and-swap cpu-cache
超线程技术是英特尔推出的一种同步多线程技术.
这些资源包括执行引擎,缓存和系统总线接口; 资源共享允许两个逻辑处理器更有效地相互协作,并允许停滞的逻辑处理器从另一个逻辑处理器借用资源.
在具有超线程的Intel CPU中,一个CPU内核(具有多个ALU)可以在同一时钟执行来自2个线程的指令.两个线程共享:存储缓冲区,缓存L1/L2和系统总线.
但是如果两个线程在一个Core上同时执行,则thread-1存储原子值,而thread-2加载此值,将用于此交换的内容:共享存储缓冲区,共享缓存L1/L2还是通常的缓存L3?
如果两个线程来自同一个进程(相同的虚拟地址空间)和两个不同进程(不同的虚拟地址空间),会发生什么?
Sandy Bridge Intel CPU - 缓存L1:
低12位 - 对于确定当前设定数值很重要
4 KB - 标准页面大小
为什么在迭代可变参数模板参数时我们必须使用其他构造,如(non()- function,temp[]- array或empty [](...){}- lambda)?
众所周知,我们可以使用以下方法在C++中使用可变参数模板迭代参数包:
#include <iostream>
#include <cstdlib>
#include <valarray>
#include <numeric>
using namespace std;
template<typename ...Args> constexpr inline void non(Args ...) {}
template<typename T, typename ...Args>
inline T sum1(T val, Args ...args) { non(val += args ...); return val; } // v1
// why do we need some function non() here?
template<typename T, typename ...Args>
inline T sum2(T val, Args ...args) { auto tmp = { val += args... }; return …Run Code Online (Sandbox Code Playgroud) For the trunk "master" I can do "git reset hard" to an earlier commit and then "git push force", to rewrite it in the repository. And I lose part of the development, after this commit. But if for some branches it is not so critical, then for the trunk "master" is very critical. Is it possible to disable do "push force", which overwrite "master" trunk of repository, and how can I switch off it?
我可以使用此类包装器来对对象进行线程安全访问,并且所需的行为符合C++ 11吗?
主要重点是字符串:
T* operator->() {
Run Code Online (Sandbox Code Playgroud)
和
T& operator*() {
Run Code Online (Sandbox Code Playgroud)
注意,我知道这里最好使用std :: atomic <>作为整数(int),但是在这个代码而不是int中我们可以使用任何其他对象.
使用执行周期指针习惯用法 2.0版:
#include<thread>
#include<mutex>
#include<memory>
#include<iostream>
#include<vector>
template<typename T>
class safe_obj {
T obj;
mutable std::mutex mtx;
safe_obj(safe_obj<T> &) {}
safe_obj<T>& operator=(safe_obj<T> &) {}
class T_exclusive_lock {
std::unique_lock<std::mutex> xlock;
public:
T*const self;
T_exclusive_lock(T * const s, std::mutex& _mtx)
:self(s), xlock(_mtx) {}
T* operator -> () const {return self;}
operator T&() {return *self;}
friend std::ostream& operator << (std::ostream &stream, T_exclusive_lock &obj) {
stream << obj;
return …Run Code Online (Sandbox Code Playgroud) infiniband(RDMA)的最大电缆长度是多少?
例如.这里已经说过,对于四通道铜缆,它可以高达10M.并使用光纤连接电缆,与标准InfiniBand 4x和以太网10GBaseCX4完全电气兼容,最高可达100 M:
http://electronicdesign.com/communications/system-extends-infiniband-cable-reach-100-m
英特尔x86_64处理器不仅是流水线架构,还是超标量?
流水线操作 - 这两个序列并行执行(同一时钟中相同流水线单元的不同阶段,例如4个阶段的ADD):
超标量 - 这两个序列并行执行(两个指令可以在同一时钟中启动到不同的流水线单元,例如ADD和MUL):
众所周知,现代x86_64上的所有缓存L1 / L2 / L3级别都是虚拟索引的,并进行了物理标记。并且所有内核都通过QPI / HyperTransport上的高速缓存一致性协议MOESI / MESIF通过最后一级高速缓存-L3进行通信。
例如,Sandybridge系列CPU具有4至16路高速缓存L3和page_size 4KB,那么这允许在并发进程之间交换数据,并发进程通过共享内存在不同内核上执行。这是可能的,因为高速缓存L3不能同时包含与进程1的页面和与进程2的页面相同的物理内存区域。
这是否意味着每次进程1请求相同的共享内存区域时,进程2会将其页面的缓存行刷新到RAM中,然后进程1加载与页面的缓存行相同的内存区域在process-1的虚拟空间中?真的很慢还是处理器使用了一些优化?
现代的x86_64 CPU是否使用相同的缓存行,而不进行任何刷新,以通过共享内存在具有不同虚拟空间的2个进程之间进行通信?
Sandy Bridge Intel CPU-缓存L3:
低19位-对确定当前设置的数字有效
4 KB-标准页面大小
我们有7个丢失的位[18:12]-即我们需要检查(7 ^ 2 * 16位)= 1024个缓存行。这与1024路缓存相同-因此非常慢。这是否意味着缓存L3(已物理索引,已物理标记)?
标签虚拟地址中丢失位的摘要(页面大小8 KB-12位):
众所周知,有:https://www.kernel.org/doc/Documentation/networking/scaling.txt
这是否意味着:
那是对的吗?
x86-64 ×4
concurrency ×3
x86 ×3
c++ ×2
c++11 ×2
cpu-cache ×2
c++14 ×1
c++17 ×1
cpu ×1
cuda ×1
ethernet ×1
git ×1
gpgpu ×1
infiniband ×1
intel ×1
linux ×1
linux-kernel ×1
networking ×1
nvidia ×1
performance ×1
rdma ×1
tcp ×1