小编ein*_*ica的帖子

这个memcpy实现中缺少什么/次优?

我对编写一个memcpy()教育练习感兴趣.我不会写一篇关于我做了什么和没想过的论文,但这里 有一些人的实现:

__forceinline   // Since Size is usually known,
                // most useless code will be optimized out
                // if the function is inlined.

void* myMemcpy(char* Dst, const char* Src, size_t Size)
{
        void* start = Dst;
        for ( ; Size >= sizeof(__m256i); Size -= sizeof(__m256i) )
        {
                __m256i ymm = _mm256_loadu_si256(((const __m256i* &)Src)++);
                _mm256_storeu_si256(((__m256i* &)Dst)++, ymm);
        }

#define CPY_1B *((uint8_t * &)Dst)++ = *((const uint8_t * &)Src)++
#define CPY_2B *((uint16_t* &)Dst)++ = *((const uint16_t* &)Src)++
#define CPY_4B …
Run Code Online (Sandbox Code Playgroud)

c optimization x86 simd avx

26
推荐指数
3
解决办法
4232
查看次数

静态分析工具,用于检测C++中的ABI中断

破坏DSO /共享库与C++接口的二进制向后兼容性并不是很难.也就是说,是否存在静态分析工具,如果给出两组不同的头文件,可以帮助检测此类ABI中断:DSO的早期状态和当前状态(也可能是DSO)?欢迎免费和商业产品建议.

如果它还可以警告不良做法,例如DSO接口中的内联函数和默认函数参数,那就太棒了.

c++ static-analysis shared-libraries backwards-compatibility

25
推荐指数
2
解决办法
7222
查看次数

为什么我不能在g ++ 4.9.2中使用<experimental/filesystem>?

我正在尝试使用文件系统.我有-std=c++11 -std=c++1y我的CMakeLists.txt.GCC版本是4.9.2.但是,我有一个错误:

/home/loom/MyProject/src/main.cpp:5:35: fatal error: experimental/filesystem: No such file or directory
 #include <experimental/filesystem>
                                   ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

什么是正确的使用方式std::experimental::filesystem

c++ filesystems g++ libstdc++ c++11

25
推荐指数
1
解决办法
2万
查看次数

使用hyperref时如何使超链接导航到LaTeX中图形的顶部?

我有一个带有图形的LaTeX文档及其引用:

\begin{figure}
...
\caption{...}
\label{fig:1}
\end{figure}

\ref{fig:1}
Run Code Online (Sandbox Code Playgroud)

我使用hyperref包在生成的PDF中获取超链接.然而,图中的链接导航到标题,使图形本身不在视图之外.如何在不将标题移到顶部的情况下导航到图形的开头?

latex viewport figures captions

24
推荐指数
2
解决办法
9641
查看次数

搜索快速/高效的直方图算法(带有预先指定的箱)

我没有在Matlab之外做太多编码,但我需要将我的Matlab代码导出到另一种语言,很可能是C.我的Matlab代码包括一个直方图函数histc(),它放置我的输入数据(这是双-precision,而不是整数)到指定的bin数组中,以形成直方图.

我确信我可以拼凑几个嵌套循环来生成直方图函数,但是我需要这个函数快速且内存很轻,因为它将被重复且经常访问.

为了避免重新发明轮子,任何人都知道C语言是否有任何现有的直方图功能可供使用,或者是否需要这样的人通常自己创建它?

有人知道创建直方图的有效算法吗?伪代码很好.

提前致谢.

c c++ algorithm matlab histogram

24
推荐指数
3
解决办法
4万
查看次数

#pragma unroll做了什么?它会影响线程数吗?

我是CUDA的新手,我无法理解循环展开.我写了一段代码来理解这项技术

__global__ void kernel(float *b, int size)
{
    int tid = blockDim.x * blockIdx.x + threadIdx.x;
 #pragma unroll
    for(int i=0;i<size;i++)
        b[i]=i;
}
Run Code Online (Sandbox Code Playgroud)

以上是我的核心功能.在main我称之为下面

int main()
{
    float * a; //host array
    float * b; //device array
    int size=100;

    a=(float*)malloc(size*sizeof(float));
    cudaMalloc((float**)&b,size);
    cudaMemcpy(b, a, size, cudaMemcpyHostToDevice);

    kernel<<<1,size>>>(b,size); //size=100

    cudaMemcpy(a, b, size, cudaMemcpyDeviceToHost);

    for(int i=0;i<size;i++)
        cout<<a[i]<<"\t";

    _getch();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着我有size*size= 10000个线程运行来执行程序?在展开循环时是否创建了100个?

cuda nvidia pragma loop-unrolling

24
推荐指数
1
解决办法
3万
查看次数

为什么现代C++编译器不能优化这样的简单循环?(Clang,MSVC)

当我使用Clang(-O3)或MSVC(/O2)编译并运行此代码时...

#include <stdio.h>
#include <time.h>

static int const N = 0x8000;

int main()
{
    clock_t const start = clock();
    for (int i = 0; i < N; ++i)
    {
        int a[N];    // Never used outside of this block, but not optimized away
        for (int j = 0; j < N; ++j)
        {
            ++a[j];  // This is undefined behavior (due to possible
                     // signed integer overflow), but Clang doesn't see it
        }
    }
    clock_t const finish = …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang compiler-optimization visual-c++

24
推荐指数
2
解决办法
1854
查看次数

修复此模板分辨率模糊的正确方法是什么?

假设我写了:

template <typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
void foo() { std::cout << "T is integral." << std::endl; }

template <typename T>
void foo() { std::cout << "Any T." << std::endl; }

int main() { foo<short>(); }
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我得到一个关于调用歧义的错误(如果我替换short,则没有错误float).我应该如何修复此代码,以便获得整数类型的较高版本和较低版本?

如果您的建议扩展到foo()除了一般版本之外的多个专业版本的情况,则奖励积分.

c++ sfinae enable-if c++11 c++14

24
推荐指数
3
解决办法
1243
查看次数

Boost文件系统和标准C++文件系统库有多相似?

我需要一个文件系统库,用于支持C++ 11的编译器或支持C++ 14的编译器 - 所以它不能来自C++ 17.

现在,我知道进入C++ 17的文件系统库是基于Boost :: Filesystem的; 但是 - 它们是否足够相似,我可以使用Boost库,然后在以后无缝切换到标准版本,而不会更改,比如using声明?或两者之间是否存在(轻微/重大)差异?我知道,对于这种情况variant,Boost和标准库版本有很大不同.

c++ c++-standard-library boost-filesystem c++11 c++17

24
推荐指数
2
解决办法
3998
查看次数

在CUDA内核中,如何将数组存储在"本地线程内存"中?

我正在尝试使用CUDA开发一个小程序,但由于它是SLOW,我做了一些测试并用Google搜索了一下.我发现虽然单个变量默认存储在本地线程内存中,但数组通常不存在.我想这就是为什么它花了这么多时间来执行.现在我想知道:因为本地线程内存至少应该是16KB,因为我的数组就像52个字符长,有没有办法(语法请:))将它们存储在本地内存中?

不应该是这样的:

__global__ my_kernel(int a)
{
  __local__ unsigned char p[50];
}
Run Code Online (Sandbox Code Playgroud)

memory arrays cuda gpu-local-memory

23
推荐指数
2
解决办法
3万
查看次数